package com.sg.file.receive.provider.util.creator;

import com.sg.file.common.conf.FileSizeTypeConf;
import com.sg.file.manager.repository.pojo.FileInfo;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;

import java.io.File;

/**
 * 文件路径组装类
 * Created by asus on 2018/7/7.
 */
public class PathCreator {
    private final static String DATE_FILE_DIR_YEAR= "yyyy";
    private final static String DATE_FILE_DIR_MONTH = "yyyyMM";
    private final static String DATE_FILE_DIR_DAY = "yyyyMMdd";
    private final static String TMP_DIR_NAME="tmp";
    /**
     * 根据文件信息生成文件存储路径
     *文件根路径/项目名称（文件服务需要，文件产品不需要）/日期时间戳/文件分类/文件转换类型/文件名称（时间戳+7位随机数）
     * @Param fileInfo 文件信息
     * @Param basePath 文件存储的根路径
     * @param fileSizeType 文件类型(o:原文件,l：大尺寸文件,m：中等尺寸文件,s：小尺寸文件,t：缩略图)
     * @return
     */
    public static String create(FileInfo fileInfo,String basePath,String fileSizeType){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(basePath)
                     .append(File.separator).append(fileInfo.getProjectName())
                     .append(File.separator).append(new DateTime(fileInfo.getInDate()).toString(DATE_FILE_DIR_MONTH))
                     .append(File.separator).append(fileInfo.getFileType())
                     .append(File.separator).append(fileSizeType)
                     .append(File.separator).append(fileInfo.getSaveFileName())
                     .append(".")
                     .append(fileInfo.getFileSuffix());
        return stringBuilder.toString();
    }

    /**
     * 根据文件信息生成文件存储路径
     *文件根路径/项目名称（文件服务需要，文件产品不需要）/日期时间戳/文件分类/文件转换类型/文件名称（时间戳+7位随机数）
     * @Param fileInfo 文件信息
     * @Param basePath 文件存储的根路径
     * @param fileSizeType 文件类型(o:原文件,l：大尺寸文件,m：中等尺寸文件,s：小尺寸文件,t：缩略图)
     * @param suffix 文件后缀
     * @return
     */
    public static String create(FileInfo fileInfo,String basePath,String fileSizeType,String suffix){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(basePath)
                .append(File.separator).append(fileInfo.getProjectName())
                .append(File.separator).append(new DateTime(fileInfo.getInDate()).toString(DATE_FILE_DIR_MONTH))
                .append(File.separator).append(fileInfo.getFileType())
                .append(File.separator).append(fileSizeType)
                .append(File.separator).append(fileInfo.getSaveFileName())
                .append(".")
                .append(suffix);
        return stringBuilder.toString();
    }

    /**
     * 根据源文件地址和转化文件大小类型，生成转化后文件地址
     * @param orginFilePath
     * @param transFileSizeType
     * @param fileSuffix 文件名后缀
     * @return
     */
    public static String getTransFilePath(String orginFilePath,String transFileSizeType,String fileSuffix){
        String transFilePath = null;
        //原文件尺寸类别目录名称
        String originDirName = File.separator+ FileSizeTypeConf.ORIGINAL+File.separator;
        //转化后尺寸类别目录名称
        String transDirName = File.separator+ transFileSizeType+File.separator;
        transFilePath = StringUtils.replace(orginFilePath,originDirName,transDirName);
        transFilePath = StringUtils.substring(transFilePath,0,transFilePath.lastIndexOf("."));
        transFilePath = transFilePath+"."+fileSuffix;
        return transFilePath;
    }

    /**
     * 获取临时文件存储路径
     * @param basePath
     * @param tmpFileName
     * @return
     */
    public static String getTmpDirPath(String basePath,String tmpFileName){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(basePath)
                .append(File.separator)
                .append(TMP_DIR_NAME)
                .append(File.separator)
                .append(tmpFileName);
        return stringBuilder.toString();
    }

    public static void main(String[] args) {
        String  str = "D:/file/A/201807/image/o/jkjkljlk.png";
        System.out.println(getTransFilePath(str,"t","jpg"));
    }
}
